const Koa=require("koa");
const path=require("path");
const logger=require("koa-logger");//产生日志记录
const onerror=require("koa-onerror");//错误显示转换
const serve=require("koa-static");//静态资源
const rou=require("./router");//路由模块
const session=require("koa-session");
const koaBody=require("koa-body");//内容解析
const { historyApiFallback } = require('koa2-connect-history-api-fallback') // 让koa支持vue的历史模式
const app=new Koa();


app.use(logger());
onerror(app);

let staticPath=path.join(__dirname,"./public/");

app.use( historyApiFallback({
    index:"/wbs22042/index.html", // 按照服务器路径指定文件
    // whiteList:[
    //     "/user","/stu","/test","/cors"
    // ]
    rewrites:[
        {
            from:new RegExp("^(?!(/wbs22042/)).*"),  // 通过正则拦截符合条件的请求，经过to配置进行地址转换
            to:function(content){
                // console.log(content);
                return content.parsedUrl.path
            }
        }
    ]
}) );
app.use(serve(staticPath));

app.keys = ['itany-koa'];
const CONFIG={
    key: 'SESSIONID',
    maxAge: 86400000,//有效期默认为1天，默认单位是毫秒
    
};
app.use(session(CONFIG, app));

app.use(koaBody({
    multipart:true,//支持文件上传
    formidable:{
        //设置上传文件由二进制数据转换成文件后的服务器存放目录-文件存储时会完成重新命名操作
        uploadDir:path.join(__dirname,"./public/upload"),
        //设置是否保留上传的文件的后缀(默认false)
        keepExtensions:true
    }
}));

app.use(async (ctx,next)=>{
    if(!ctx.path.startsWith("/cors")){
        ctx.set("Access-Control-Allow-Origin","*")
        //  为复杂请求提供请求方法允许列表
        ctx.set("Access-Control-Allow-Methods","OPTIONS,GET,DELETE,POST,PUT,PATCH")
        //  为复杂请求提供特殊请求头允许列表
        ctx.set("Access-Control-Allow-Headers","Content-Type")
    }
    if(ctx.method=="OPTIONS"){
        ctx.body = "";
    }else{
        await next();
    }
})

app.use(rou.router.routes());
app.listen(3000);